package com.zhuoyue.elmt;

/**
 * @author JiangYH
 */
public class ExportCertFormKeystore {

    public void execCommand(String[] arstringCommand) {
        for (int i = 0; i < arstringCommand.length; i++) {
            System.out.print(arstringCommand[i] + " ");
        }
        try {
            Runtime.getRuntime().exec(arstringCommand);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    public void execCommand(String arstringCommand) {
        try {
            Runtime.getRuntime().exec(arstringCommand);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    /**
     * 生成密钥
     */
    public void genkey() {
        String[] arstringCommand = new String[]{"cmd ", "/k", "start", // cmd Shell命令
                "keytool", "-genkey", // -genkey表示生成密钥
                "-validity", "36500",// -validity指定证书有效期(单位：天)，这里是36000天
                "-keysize", "1024",//     指定密钥长度
                "-alias", "joyue", // -alias指定别名，这里是ss
                "-keyalg", "RSA", // -keyalg 指定密钥的算法 (如 RSA DSA（如果不指定默认采用DSA）)
                "-keystore", "d:/joyue.keystore",  // -keystore指定存储位置，这里是d:/demo.keystore
                // CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), ST=(州或省份名称), C=(单位的两字母国家代码)"
                "-dname", "CN=(joyue), OU=(joyue), O=(joyue), L=(SZ), ST=(SZ), C=(CN)", //Name
                "-storepass", "Admin0.123",// 指定密钥库的密码(获取keystore信息所需的密码)
                "-keypass", "Admin0.123", // 指定别名条目的密码(私钥的密码)
                "-v"// -v 显示密钥库中的证书详细信息
        };
        execCommand(arstringCommand);
    }

    /**
     * 导出证书文件
     */
    public void export() {
        String[] arstringCommand = new String[]{"cmd ", "/k", "start", // cmd Shell命令
                "keytool", "-export", // - export指定为导出操作
                "-keystore", "d:/joyue.keystore", // -keystore指定keystore文件，这里是d:/demo.keystore
                "-alias", "joyue", // -alias指定别名，这里是ss
                "-file", "d:/joyue.cer", // -file指向导出路径
                "-storepass", "Admin0.123"// 指定密钥库的密码
        };
        execCommand(arstringCommand);
    }

    public static void main(String[] args) {
        new ExportCertFormKeystore().export();
    }

    public void genkeyTest() {
        //生成密钥测试
        new ExportCertFormKeystore().genkey();
    }

    public void exportTest() {
        //导出证书文件测试
        new ExportCertFormKeystore().export();
    }
}
